<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <script>

        // 函数的声明方式

        //    1  具名函数   function fn(){}

        //    2  赋值式函数:把一个函数赋值给了一个变量   --- 函数也是一种特殊的数据

        //    3  匿名函数:没有名字的函数  ---  一次性的函数   只能在声明的时候就立即调用


        // fn() ;

        // var fn = function() {
        //     console.log(666) ;
        // }
        // console.log(fn);   // 打印整个函数

      
        // js实际的执行过程
        // var fn ;    // undefined
        // fn() ;      // fn is not a function 
        // fn = function(){
        //     console.log(666);
        // }


        // 预编译打乱了程序的执行顺序   --- 这种语法应该被抛弃

        // 更推荐使用赋值式函数





        // 匿名函数   ---  一次性的函数      --- 封装性
        //    语法： (function(){})()
        //    声明的时候，就立刻调用   
        // (function (n) {
        //     console.log(n);
        // })(7);

        // !function (n) {
        //     console.log(n);
        // }(8) ;

        // +function (n) {
        //     console.log(n);
        // }(8) ;

        // ~function (n) {
        //     console.log(n);
        // }(8) ;

        // 后面再无法调用这个函数了


        // 1 工资的问题    入职10000     每年涨入职的5%    50年后
        //   声明一个变量存储工资 
        // var salary = 10000 ;
        // var money = salary * 0.05 * 50 + salary ;
        // document.write('<h1>50年后的工资为' + money + '</h1>');

        // 代码没有封装   
        // salary和money都是全局变量

        // (function(){
        //     // salary和money都是局部变量  --- 函数执行完毕变量就会被释放
        //     var salary = 10000 ;
        //     var money = salary * 0.05 * 50 + salary ;
        //     document.write('<h1>50年后的工资为' + money + '</h1>');

        // })()



    





    </script>
    
</body>
</html>